package easy; /**
 * 给你两个数组，arr1 和 arr2，arr2 中的元素各不相同，arr2 中的每个元素都出现在 arr1 中。
 *
 * 对 arr1 中的元素进行排序，使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
 * 示例 1：
 *
 * 输入：arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
 * 输出：[2,2,2,1,4,3,3,9,6,7,19]
 * 示例  2:
 *
 * 输入：arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]
 * 输出：[22,28,8,6,17,44]
 */


import java.util.Arrays;

public class test9 {
    public static void main(String[] args) {
        test9 test9 = new test9();
        int[] arr1 = {2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19};
        int[] arr2 = {2, 1, 4, 3, 9, 6};
        System.out.println(Arrays.toString(test9.relativeSortArray(arr1, arr2)));
    }

    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[] ints = new int[1001];
        // 将 arr1 中的数记录下来
        //这个ints数组记录的是arr1里面每个数字出现的次数,索引是数字，数值对应该数字出现的次数
        for (int i : arr1) {
            ints[i]++;
        }

        // 先安排 arr2 中的数
        int s = 0;
        for (int i : arr2) {
            while (ints[i] > 0) {
                arr1[s++] = i;
                ints[i]--;
            }
        }

        // 再排剩下的数
        //在上面安排完arr2里面的数字以后， 也就是count[num2]--这步操作
        //使得ints数组里面只剩下了未在 arr2 中出现过的元素
        //ints[i] > 0,说明未出现在arr2里的元素次数大于0
        for (int i = 0; i < ints.length; i++) {
            while (ints[i] > 0) {
                arr1[s++] = i;
                ints[i]--;
            }
        }
        return arr1;
    }
}
